Последние изменения - Поиск:

edit SideBar

ПараллельностьВA2

Из чата telegram:

Сергей Зорин (aka kemet):

язык предоставляет простоые, но достаточно мощные средства, на которых строятся нужное тобе поведение. Например, смотри модуль Locks.Mod Highlevel locks (recursive, reader writer

Сергей Зорин:

насколько я помню при попытке взаимной блокировки случится assert, если активность помечаена как SAFE она перезапустится и есть шанс, что к этому времени ресурс освободился. количесвто рестартов указано в настройках

Статья про А2 на Хабре: https://habr.com/ru/post/258917/

Объект может иметь тело — завершающий блок операторов, выполняемый после инициализации объекта. Если тело объекта помечено модификатором ACTIVE (возможно с указанием приоритета), то такой объект называется активным. Как уже говорилось, активность (поток) инкапсулирована в объекте и создаётся в момент инстанцирования активного объекта. Активность существует пока выполняется тело активного объекта. Активный объект продолжает существовать, пока существует его активность, даже если на него нет ссылок, после чего он становится пассивным и может быть утилизирован в обычном порядке.

Коммуникация между активностями производится через вызовы методов активных и не активных объектов.

Защита от одновременного доступа к состояниям объекта осуществляется поддержкой на уровне языка монопольных областей (exclusive regions) — последовательности операторов, заключённых в операторные скобки BEGIN… END, помеченные модификатором EXCLUSIVE, — соответствующих концепции критических областей Бринча Хансена. Если монопольная область охватывает всё тело объекта, он называется монопольным и совмещает концепцию критических областей Хансена с концепцией процедуры монитора Хоара. В отличии от процедур монитора Хоара, методы объекта не обязаны быть монопольными, и могут наблюдать не синхронизированные состояния объекта. Модуль считается объектом с одним экземпляром. Компилятор и среда времени выполнения гарантируют, что в монопольной области может находиться не более одной активности одновременно.

Таким образом, модель защиты в Активном Обероне — монитор, размещенный в экземпляре объекта (instance-based monitor).

Главная идея монитора в том, что с ним связан инвариант — выражение, определяющее внутреннее, непротиворечивое состояние и доказывающее правильность его поведения. Инициализаторы объекта устанавливают инвариант, а монопольные методы его поддерживают.

Для синхронизации в Активном Обероне используется оператор AWAIT, тогда, как большинство реализаций мониторов используют условные переменные Хоара на основе очередей Хансена. Оператор AWAIT принимает в качестве аргумента логическое условие продолжения выполнения, в случае несоблюдение которого активность приостанавливается, а захваченная монопольная область освобождается до момента, когда условие выражения станет истинным. Активность продолжит работу когда снова сможет войти в отпущенную ранее монопольную секцию. Условия продолжения пересчитываются только когда какая-либо активность выходит из монопольной секции.

Victor M:

Есть Pamela/SPIN - специальный язык и система для доказательства правильности взаимоблокировок и т.п.

Править - История - Печать - Последние изменения - Поиск
Редакция от 27.07.2019 14:17